package reconhecimento.util;

import java.text.NumberFormat;

public class MatrizConfusao {
	private int matriz[][];

	public MatrizConfusao() {
		this.matriz = new int[10][10];
		for (int i = 0; i < this.matriz.length; i++) {
			for (int j = 0; j < this.matriz[i].length; j++) {
				this.matriz[i][j] = 0;
			}
		}
	}

	public void inserirValores(final Integer real, final Integer suspeita) {
		this.matriz[real.intValue()][suspeita.intValue()]++;
	}

	public int[][] getMatriz() {
		return this.matriz;
	}

	public String porcentagemAcertos() {
//		int qtdAcertos = 0;
//		int qtdTotal = 0;
//		for (int i = 0; i < this.matriz.length; i++) {
//			for (int j = 0; j < this.matriz[i].length; j++) {
//				qtdTotal += this.matriz[i][j];
//				qtdAcertos += (i==j?this.matriz[i][j]:0);
//			}
//		}
		return NumberFormat.getPercentInstance().format(this.porcentagemAcertosDouble()*10);
	}
	
	public double porcentagemAcertos(int valor){
		int erros = this.getQtdErros(valor);
		return ((double)this.matriz[valor][valor] /(erros+this.matriz[valor][valor]))*100;
	}
	
	private int getQtdErros(int valor){
		int erros = 0;
		for (int i = 0; i < this.matriz[valor].length; i++) {
			if(i != valor){
				erros += this.matriz[valor][i];
			}
		}		
		return erros;
	}
	
	public double porcentagemErros(int valorReal, int valorSuspeito){
		int qtdErrosTotal = this.getQtdErros(valorReal);
		
		return ((double)this.matriz[valorReal][valorSuspeito] /(qtdErrosTotal))*100;
	}
	
	public double porcentagemAcertosDouble() {
		int qtdAcertos = 0;
		int qtdTotal = 0;
		for (int i = 0; i < this.matriz.length; i++) {
			for (int j = 0; j < this.matriz[i].length; j++) {
				qtdTotal += this.matriz[i][j];
				qtdAcertos += (i==j?this.matriz[i][j]:0);
			}
		}
		return ((double)qtdAcertos/qtdTotal)*100;
	}

	@Override
	public String toString() {
		String retorno = "X\t0\t1\t2\t3\t4\t5\t6\t7\t8\t9\n";
		for (int i = 0; i < this.matriz.length; i++) {
			retorno += i + "\t";
			for (int j = 0; j < this.matriz[i].length; j++) {
				retorno += this.matriz[i][j] + "\t";
			}
			retorno += "\n";
		}
		return retorno;
	}
}
